package br.mywallet.data;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import br.mywallet.model.Saldo;
import br.mywallet.util.Util;

public class SaldoDAO {
	private final String TABELA = "Saldo";

	private final String ID_CONTA = "idConta";
	private final String DATA_SALDO = "data";
	private final String VALOR = "valor";

	private final String ULTIMO_SALDO_CONTA_POR_ID = "idConta = ? and data = (select max(data) from Saldo where idConta = ?)";
	private final String ULTIMO_SALDO_CONTA_POR_IDENTIFICADOR = "IDENTIFICADOR = ? and data = (select max(data) from Saldo where IDENTIFICADOR = ?)";

	public boolean persistirSaldo(int idConta, Saldo saldo, Context ctx) {
		SQLiteDatabase db = Repositorio.getConexao(ctx);

		ContentValues values = new ContentValues();
		values.put(ID_CONTA, idConta);
		values.put(DATA_SALDO, Util.formataData(saldo.getDataSaldo(),Util.FORMATO_DATA_DB));
		values.put(VALOR, saldo.getValor());

		db.insert(TABELA, "", values);

		db.close();

		return true;
	}

	public Saldo pesquisarUltimoSaldo(int idConta, Context ctx) {
		SQLiteDatabase db = Repositorio.getConexao(ctx);

		Cursor cur = db
				.query(TABELA, null, ULTIMO_SALDO_CONTA_POR_ID, new String[] {
						String.valueOf(idConta), String.valueOf(idConta) },
						null, null, null);

		if (cur.moveToNext()) {
			return new Saldo(Util.formataData(
					cur.getString(cur.getColumnIndex(DATA_SALDO)),
					Util.FORMATO_DATA_DB), cur.getFloat(cur
					.getColumnIndex(VALOR)));
		} else {
			return new Saldo();
		}
	}

	public Saldo pesquisarUltimoSaldo(String identificador, Context ctx) {
		SQLiteDatabase db = Repositorio.getConexao(ctx);

		Cursor cur = db.query(TABELA, null,
				ULTIMO_SALDO_CONTA_POR_IDENTIFICADOR, new String[] {
						identificador, identificador }, null, null, null);

		if (cur.moveToNext()) {
			return new Saldo(Util.formataData(
					cur.getString(cur.getColumnIndex(DATA_SALDO)),
					Util.FORMATO_DATA_DB), cur.getFloat(cur
					.getColumnIndex(VALOR)));
		} else {
			return null;
		}
	}
}
